package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"sync"
	"time"
)

//Task 工作者
type Task struct {
	sync.WaitGroup

	TypeId       int8   //任务类型
	VideId       int    // id
	VideName     string // 站点名称
	CamIP        string // 摄像头内网ip
	ReqUrl       string // 请求地址
	TimeInterval int    // 请求间隔时间
	data         []byte // 请求到的图像数据
}

//Work 工作者工作
func (t *Task) Work() {
	t.Add(1)
	defer t.Done()

	for {
		select {
		case <-time.After(time.Second * time.Duration(t.TimeInterval)):
			//t.Request()
			fmt.Println(time.Now(), t.ReqUrl)
			//调用摄像头的图像数据
			req, _ := http.NewRequest("GET", t.ReqUrl, nil)
			req.Close = false // 关闭连接 防止http底层资源未释放
			client := http.Client{Timeout: time.Duration(t.TimeInterval) * time.Second}
			resp, err := client.Do(req)
			if resp != nil {
				// 释放http底层资源
				defer resp.Body.Close()
			}
			if err != nil {
				fmt.Println("出现错误", err)
				continue
			}

			//获取到返回的图象数据
			data, _ := ioutil.ReadAll(resp.Body)

			// 小于100 说明此时数据有问题
			if len(data) < 100 {
				continue
			}

			// 开辟新的变量 防止变量污染
			t.data = make([]byte, len(data))
			copy(t.data, data)

			Detect(t)
		}
	}
}

// Request 发起请求获取图像数据
/*func (t *Task) Request() {
	fmt.Println(t.ReqUrl)
	//调用摄像头的图像数据
	req, _ := http.NewRequest("GET", t.ReqUrl, nil)
	req.Close = false //？？什么意思
	client := http.Client{Timeout: time.Duration(t.TimeInterval) * time.Second}
	resp, err := client.Do(req)
	if resp != nil { //？？什么意思
		defer resp.Body.Close()
	}
	if err != nil {
		fmt.Println("出现错误", err)
		return
	}

	//获取到返回的图象数据
	data, _ := ioutil.ReadAll(resp.Body)

	// 小于100 说明此时数据有问题
	if len(data) < 100 {
		return
	}

	// 开辟新的变量 防止变量污染
	td := make([]byte, len(data))
	copy(td, data)
	//向当前任务中压入图像数据
	t.data = td
	TaskCh <- t
}*/
